package scene

import (
	"fyne.io/fyne/v2"
	"fyne.io/fyne/v2/container"
	"fyne.io/fyne/v2/widget"
)

// NewPage 新建页面类
type NewPage struct {
	window  fyne.Window
	content fyne.CanvasObject
	title   string
	width   float32
	height  float32
	onClose func()
}

// NewNewPage 创建新的页面
func NewNewPage(app fyne.App, title string, width, height float32) *NewPage {
	page := &NewPage{
		title:  title,
		width:  width,
		height: height,
	}

	// 创建新窗口
	page.window = app.NewWindow(title)
	page.window.Resize(fyne.NewSize(width, height))

	// 创建页面内容
	page.createContent()

	// 设置窗口内容
	page.window.SetContent(page.content)

	// 设置窗口关闭事件
	page.window.SetOnClosed(func() {
		if page.onClose != nil {
			page.onClose()
		}
	})

	return page
}

// createContent 创建页面内容
func (p *NewPage) createContent() {
	// 创建一个简单的布局，包含标题和按钮
	titleLabel := widget.NewLabel("新建页面")
	titleLabel.TextStyle.Bold = true

	// 添加一些示例按钮
	button1 := widget.NewButton("按钮1", func() {
		// 按钮1的点击事件
	})

	button2 := widget.NewButton("按钮2", func() {
		// 按钮2的点击事件
	})

	button3 := widget.NewButton("按钮3", func() {
		// 按钮3的点击事件
	})

	// 创建按钮容器
	buttonContainer := container.NewHBox(button1, button2, button3)

	// 创建主容器
	p.content = container.NewVBox(
		titleLabel,
		widget.NewSeparator(),
		buttonContainer,
		widget.NewSeparator(),
		widget.NewLabel("这是一个新建的页面，可以在这里添加更多内容。"),
	)
}

// Show 显示页面
func (p *NewPage) Show() {
	p.window.Show()
}

// Hide 隐藏页面
func (p *NewPage) Hide() {
	p.window.Hide()
}

// Close 关闭页面
func (p *NewPage) Close() {
	p.window.Close()
}

// SetOnClose 设置关闭回调
func (p *NewPage) SetOnClose(fn func()) {
	p.onClose = fn
}

// GetWindow 获取窗口对象
func (p *NewPage) GetWindow() fyne.Window {
	return p.window
}

// GetContent 获取内容容器
func (p *NewPage) GetContent() fyne.CanvasObject {
	return p.content
}

// AddButton 添加按钮到页面
func (p *NewPage) AddButton(text string, callback func()) *widget.Button {
	button := widget.NewButton(text, callback)
	// 注意：这里需要重新创建容器来添加新元素
	// 在实际使用中，你可能需要更复杂的容器管理
	return button
}

// AddLabel 添加标签到页面
func (p *NewPage) AddLabel(text string) *widget.Label {
	label := widget.NewLabel(text)
	// 注意：这里需要重新创建容器来添加新元素
	// 在实际使用中，你可能需要更复杂的容器管理
	return label
}

// AddSeparator 添加分隔符到页面
func (p *NewPage) AddSeparator() {
	//separator := widget.NewSeparator()
	// 注意：这里需要重新创建容器来添加新元素
	// 在实际使用中，你可能需要更复杂的容器管理
}

// SetTitle 设置页面标题
func (p *NewPage) SetTitle(title string) {
	p.title = title
	p.window.SetTitle(title)
}

// GetTitle 获取页面标题
func (p *NewPage) GetTitle() string {
	return p.title
}
